Przygotowanie

Załadujmy potrzebne pakiety

library('httr')
library('jsonlite')
library('reshape2')
library('dplyr')

Wysyłanie żądań HTTP z pomocą pakietu httr

Posłużymy się funkcją GET(). Interesujące nas parametry, które przyjmuje, to:

GET(
  url, 
  query = list('nazwaParam1' = wartośćParam1, 'nazwaParam2' = wartośćParam2), 
  username = login, 
  password = hasło
)

Funkcja ta zwraca obiekt żądania HTTP. Zwrócone dane, można pobrać funkcją content(obiektŻądania, 'text').

Wyszukajmy zatem wszystkie paczki danych obejmujących swoim zasięgiem Puławy pomiędzy 27 a 30 czerwca 2016 r. W tym celu skorzystamy endpoint-u http://s2.boku.eodc.eu/granule oraz parametrów utm (pozwala wskazać element siatki UTM, który mają pokrywać dane) oraz parametrów dateMin (umożliwia wskazanie najstarszej dopuszczalnej daty) i dateMax:

req = GET(
  'http://s2.boku.eodc.eu/granule', 
  query = list('utm' = '34UEB', 'dateMin' = '2016-06-27', 'dateMax' = '2016-06-30'),
  username = 'WIC',
  password = 'pulawy2016'
)
content(req, 'text')

Umiemy już wysłać żądanie HTTP i odebrać z niego dane. Teraz potrzebujemy je sparsować do struktur danych używanych w R.

Parsowanie danych JSON za pomocą pakietu jsonlite

Pakiet jsonlite udostępnia funkcję fromJSON(), która parsuje JSON do struktur danych języka R.

W większości wypadków wynikiem parsowania będzie ramka danych języka R.

Spróbujmy zatem sparsować dane, które pobraliśmy:

paczkiPulawy = fromJSON(content(req, 'text'))
paczkiPulawy

Jak widać w wyniku otrzymaliśmy ramkę danych R (możemy o niej myśleć, jak o tabeli), której:

Teraz wystarczy się dowiedzieć, w jaki sposób możemy przetwarzać dane znajdujące się w ramkach danych R.

Pobieranie plików

W analogiczny sposób możemy wyszukać same zdjęcia satelitarne: (wyszukamy je już dla jednej, wybranej daty - 2016-06-29 i ograniczymy się do skorygowanych atmosferycznie zdjęć w rozdzielczości 60 m na piksel)

req = GET(
  'http://s2.boku.eodc.eu/image', 
  query = list('utm' = '34UEB', 'dateMin' = '2016-06-29', 'dateMax' = '2016-06-29', 'resolution' = 60, 'atmCorr' = 1),
  username = 'WIC',
  password = 'pulawy2016'
)
zdjecia = fromJSON(content(req, 'text'))
# pomińmy wyświetlanie zbędnych kolumn
zdjecia %>% select(-granule, -product, -geometry)

Jak widać adres URL umożliwiający pobranie poszczególnych zdjęć znajduje się w kolumnie url.

Pliki najprościej będzie nam pobrać funkcją download.file(url, ścieżkaZapisu, ...opcje...), którą uruchomimy w pętli:

# utworzmy katalog, w którym zapiszemy pliki
dir.create('dane', FALSE)

# dla i od 1 do liczby wierszy w ramce danych zdjecia...
for (i in 1:nrow(zdjecia)) {
  download.file(
    paste0(zdjecia[i, 'url'], '?dataType=Int16'),
    paste0('dane/', zdjecia[i, 'band'], '.tiff'),
    mode = 'wb', 
    quiet = TRUE
  )
}

Przy okazji dowiedzieliśmy się, że:

Zadania

Wyszukanie obrazów

Jednym z parametrów, za pomocą których można filtrować wyszukiwane paczki danych/zdjęcia/itp. (zależnie od endpoint-u) jest geometry. Pozwala on wyszukiwać obiekty, których obszar przecina wskazany kształt zapisany w formacie geoJSON.

Wiedząc, że aby zapisać punkt o danych współrzędnych geograficznych {X, Y} w geoJSON, należy użyć szablonu {"type":"Point","coordinates":[X, Y]}:

Podpowiedź - sprawdź dokumentację endpoint-u.

Pobranie obrazu RGB

Wiedząc, że:

dcast(ramkaDanych, date ~ band, value.var = 'imageId')

Napisz kod, który wygeneruje adresy URL pobierające kolorowy obraz będący dla danej daty złożeniem pasma B02 (jako b), B03 (jako g) i B04 (jako r).

Pobierz jeden z takich obrazów.

Uwaga - pamiętaj o dodaniu do adresu URL loginu i hasła.



zozlak/WicPomiarSatelitarny documentation built on May 5, 2019, 1:37 a.m.